import { defineStore } from 'pinia'
import { ref } from 'vue'

export const useSuperAgentStore = defineStore('superAgent', () => {
  // 聊天消息列表
  const messages = ref([])
  // 会话ID，确保整个对话过程中保持一致
  const chatId = ref(Date.now().toString())
  
  // 发送消息方法
  async function sendMessage(message) {
    if (!message.trim()) return

    // 添加用户消息到消息列表
    messages.value.push({
      role: 'user',
      content: message
    })

    try {
      // 创建 SSE 连接
      const encodedChatId = encodeURIComponent(chatId.value)
      console.log('chatId: ', chatId.value)
      const encodedMessage = encodeURIComponent(message)
      const eventSource = new EventSource(`http://127.0.0.1:8123/api/ai/manus/chat?message=${encodedMessage}&chatId=${encodedChatId}`)
      
      let fullResponse = ''
      
      // 创建一个新的助手消息对象
      const assistantMessage = {
        role: 'assistant',
        content: '',
        timestamp: new Date().toISOString()
      }
      messages.value.push(assistantMessage)
      
      return new Promise((resolve, reject) => {
        eventSource.onmessage = (event) => {
          if (event.data) {
            // 更新累积的响应
            fullResponse += event.data
            // 实时更新消息内容实现打字机效果
            assistantMessage.content = fullResponse
            // 强制触发Vue的响应式更新
            messages.value = [...messages.value]
          }
        }

        eventSource.onerror = (error) => {
          eventSource.close()
          if (!fullResponse) {
            // 只有在没有收到任何响应的情况下才视为错误
            reject(error)
            // 移除空的助手消息
            messages.value = messages.value.filter(msg => msg !== assistantMessage)
            // 添加错误消息
            messages.value.push({
              role: 'assistant',
              content: '抱歉，发送消息时出现错误。请稍后重试。'
            })
          } else {
            // 如果已经收到了一些响应，则视为正常完成
            resolve()
          }
        }
      })
    } catch (error) {
      console.error('发送消息失败:', error)
      messages.value.push({
        role: 'assistant',
        content: '抱歉，发送消息时出现错误。请稍后重试。'
      })
    }
  }

  // 清空消息列表
  function clearMessages() {
    messages.value = []
  }

  return {
    messages,
    sendMessage,
    clearMessages
  }
})